/**
 * Date格式化输出
 * @param formatStr
 * @returns {*}
 * @constructor
 */
Date.prototype.Format = function(formatStr) {
  var str = formatStr;
  var Week = ['日', '一', '二', '三', '四', '五', '六'];
  str = str.replace(/yyyy|YYYY/, this.getFullYear());
  str = str.replace(/yy|YY/, (this.getYear() % 100) > 9 ? (this.getYear() % 100).toString() : '0' + (this.getYear() % 100));
  str = str.replace(/MM/, (this.getMonth() + 1) > 9 ? (this.getMonth() + 1).toString() : '0' + (this.getMonth() + 1));
  str = str.replace(/M/g, (this.getMonth() + 1));
  str = str.replace(/w|W/g, Week[this.getDay()]);
  str = str.replace(/dd|DD/, this.getDate() > 9 ? this.getDate().toString() : '0' + this.getDate());
  str = str.replace(/d|D/g, this.getDate());
  str = str.replace(/hh|HH/, this.getHours() > 9 ? this.getHours().toString() : '0' + this.getHours());
  str = str.replace(/h|H/g, this.getHours());
  str = str.replace(/mm/, this.getMinutes() > 9 ? this.getMinutes().toString() : '0' + this.getMinutes());
  str = str.replace(/m/g, this.getMinutes());
  str = str.replace(/ss|SS/, this.getSeconds() > 9 ? this.getSeconds().toString() : '0' + this.getSeconds());
  str = str.replace(/s|S/g, this.getSeconds());
  return str
}

/**
 * 字符串截取
 * @param start
 * @param end
 */
String.prototype.lsubstr = function(start, end) {
  var temp
    , icount = 0
    , patrn = /[^\x00-\xff]/
    , strre = ""
    , str = this;
  for (var i = 0; i < str.length; i++) {
    if (icount >= start && icount < end - 1) {
      temp = str.substr(i, 1);
      if (patrn.exec(temp) == null) {
        icount = icount + 1
      } else {
        icount = icount + 2
      }
      strre += temp
    } else {
      break
    }
  }
  return strre + "..."
}

/**
 * 去除字符传两边空格
 * @returns {string}
 */
String.prototype.trim = function() {
  return this.replace(/^\s*(.*?)\s+$/, "$1")
}

/**
 * HTML标签转义
 * @returns {string}
 */
String.prototype.encodeHTML = function() {
  return this.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
}

/**
 * HTML反转义
 * @returns {string}
 */
String.prototype.decodeHTML = function() {
  return this.replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&quot;/g, '"').replace(/&amp;/g, '&');
}

String.prototype.stripTags = function() {
  var str = '';
  for(var i = 0; i<this.length; i++) {
    str += this[i];
  }
  return str.replace(/<[^<>]+?>/g, '');
}
/**
 * 去除多余空白字符
 * @returns {string}
 */
String.prototype.stripBlank = function() {
  var str = '';
  for(var i = 0; i<this.length; i++) {
    str += this[i];
  }
  return str.replace(/[\s\n\r\n]+|(?:&nbsp;)+/g, ' ');
}